// 泛型

// const getArray = (value: any, times: number = 5): any[] => {
//     return new Array(times).fill(value) //创建times个元素的数组，并把元素都填充为value
// }

// console.log(getArray(2, 3));

// const x = getArray(2, 3).map((item) => item.length)//数字没有length

// const x2 = getArray('qq', 3).map((item) => item.length)
// console.log(x, x2);


// 改用泛型
//T是泛型变量，任意定义
// const getArray = <T>(value: T, times: number = 5): T[] => {
//     return new Array(times).fill(value) //创建times个元素的数组，并把元素都填充为value
// }


// const x2 = getArray<number>('qq', 3).map((item) => item.length) // 指定是number类型
// const x2 = getArray<string>('lol', 3).map((item) => item.length)
// console.log(x2);


// 多个泛型变量 返回是一个元组[T,U][] 可以写成Array<[T,U]>
// const getArray = <T, U>(param1: T, param2: U, times: number = 5): [T, U][] => {
//     return new Array(times).fill([param1, param2])
// }
// // console.log(getArray(1, 'a', 3));
// getArray<number,string>(1, 'a', 3).forEach((item)=>{
//     console.log(item[0].toFixed());
//     // console.log(item[1].toFixed());
// })


// 泛型在函数中使用
// let getArray: <T>(arg: T, times: number) => T[]
// getArray = (arg: any, times: number) => {
//     return new Array(times).fill(arg)
// }

// console.log(getArray(123, 3));
// getArray(123, 3).map((item)=>item.length)//报错

// 类型别名
// type GetArray = <T>(arg: T, times: number) => T[]
// let getArray: GetArray = (arg: any, times: number) => {
//     return new Array(times).fill(arg)
// }
// console.log(getArray(123, 3));
// getArray(123, 3).map((item) => item.length)//报错

//接口
// interface GetArray {
//     <T>(arg: T, times: number): T[]
// }

// let getArray: GetArray = (arg: any, times: number) => {
//     return new Array(times).fill(arg)
// }
// console.log(getArray(55, 3));
// getArray(55, 3).map((item) => item.length)//报错

// interface GetArray<T> {
//     (arg: T, times: number): T[],
//     array:T[]
// }

